import cvzone
from cvzone.FaceDetectionModule import FaceDetector
import cv2

# 初始化摄像头
cap = cv2.VideoCapture(0)

# 初始化FaceDetector对象，设置最小检测置信度阈值为0.5
# modelSelection=1 表示长距离检测模型（适合5米以内）
detector = FaceDetector(minDetectionCon=0.5, modelSelection=1)

# 循环获取摄像头帧
while True:
    # 从摄像头读取当前帧
    success, img = cap.read()
    if not success:
        break

    # 在图像中检测人脸
    img, bboxs = detector.findFaces(img, draw=False)

    # 如果检测到人脸
    if bboxs:
        # 遍历每个边界框
        for bbox in bboxs:
            # bbox 包含 'id', 'bbox', 'score', 'center'
            center = bbox["center"]  # 中心点坐标
            x, y, w, h = bbox['bbox']  # 边界框坐标和大小
            score = int(bbox['score'][0] * 100)  # 识别置信度（百分比）

            # 绘制人脸中心的圆圈
            cv2.circle(img, center, 5, (255, 0, 255), cv2.FILLED)
            # 显示识别置信度文本
            cvzone.putTextRect(img, f'{score}%', (x, y - 15), border=5)
            # 画出矩形框
            cvzone.cornerRect(img, (x, y, w, h))

    # 显示检测到的人脸数量
    cv2.putText(img, f'Detected Faces: {len(bboxs)}', (10, 30),
                cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)

    # 在名为'Image'的窗口中显示图像
    cv2.imshow("Image", img)

    # 等待1毫秒
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 释放摄像头资源并关闭所有窗口
cap.release()
cv2.destroyAllWindows()